home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 30 / Amiga Format AFCD30 (Sep 1998, Issue 114).iso / -seriously_amiga- / archivers / lha2lzx3 / lha2lzx next >
AmigaDOS Script File  |  1998-06-18  |  20KB  |  356 lines

  1. .key pat    ;This allows a keyword to be passed to LhA2LZX in the internal variable "pat".  It will be the archive name that is stored here
  2. .bra {        ;This changes the normal AmigaDOS brackets < and > to { and }...
  3. .ket }        ;...because we need to use the character > for ouput re-direction - more on this later
  4.  
  5. if NOT EXISTS env:LhA2LZXpath                ;If the path of LhA2LZX is not known...
  6.     list LhA2LZX LFORMAT=%F%N >env:LhA2LZXpath    ;...get it, and store it in the file 'env:LhA2LZXpath'
  7. endif
  8.  
  9. if "`which RequestChoice`" NOT EQ "RES RequestChoice"    ;This checks to see if some of the program files that LhA2LZX uses are already resident in memory...
  10.     Resident > NIL: C:RequestChoice PURE        ;...and if they are not, they will be loaded into memory to save loading them off disk every time they are used
  11. endif                            ;If LhA2LZX has been run before in the same sitting, these programs will already be in memory
  12.                             
  13. if "`which RequestFile`" NOT EQ "RES RequestFile"    ;Comments like this one will not be read by LhA2LZX when it is running - it ignores anything after a semi-colon
  14.     Resident > NIL: C:RequestFile PURE
  15. endif
  16.  
  17. if "`which Eval`" NOT EQ "RES Eval"    ;Anything surrounded by `backticks` will be evaluated first, and the result is then given in its place (see 'v2.2' in the 'Program History' in the .guide for a fuller explanation and more examples)
  18.     Resident > NIL: C:Eval PURE    ;As another example, if you type "List `RequestFile`" in a CLI, the RequestFile requester will pop up, and the file(s) you select will be passed to the program 'List', and they will be listed
  19. endif                    ;It would be just the same as if you had typed "List RAM:new.file RAM:othernew.file RAM:old.file", which would list all the details about those 3 files, if you had selected those 3 files in the RequestFile requester
  20.  
  21. if "`which List`" NOT EQ "RES List"    ;If the result of `which List`, which will find the path of the program 'List', is not the text 'RES List' (which means it is resident in memory)...
  22.     Resident > NIL: C:List PURE    ;...this line will be processed.  If the reult IS 'RES List'...
  23. endif                    ;...LhA2LZX skips to this line from the 'if...'line
  24.  
  25.  
  26. ; $VER: LhA2LZX 3.2 (7.6.98) Richard Burke
  27. ; Above is a version string, to give details of the file's creation date, author and version number
  28.  
  29. Failat 60                    ;Allows errors when using LhA & LZX to be captured - this is to do with Return Codes (you will read more about these later - they are the numbers returned from an operation to tell you its outcome)
  30.  
  31. lab Beg                        ;'Lab' stands for 'Label', and gives us a reference point that we can easily 'skip' back to whenever we want
  32.  
  33. if NOT EXISTS "$LhA2LZXpath"            ;This checks to see if the path of the location of where LhA2LZX is actually exists. The $ symbol means 'the contents of the environmental variable stored as the file env:LhA2LZXpath'. If LhA2LZX is stored in DH1:Stuff, this line will read 'if NOT EXISTS Dh1:Stuff/LhA2LZX' - ie, if LhA2LZX does not exist there then execute the next command line. If it *can* be found there, we skip to the next 'endif'
  34. RequestChoice >nil: "LhA2LZX Error Message" "You must CD to the LhA2LZX drawer!*nSee docs for details!" "Quit"
  35.     quit                    ;If the file isn't there, there's no point in carrying on...
  36. endif
  37.  
  38. which >env:nl2zwlha lha all            ;Finds the location of the LhA tool
  39. if WARN                        ;If the LhA tool cannot be found
  40.     RequestChoice >nil: "LhA2LZX Error Message" "Can't find 'LhA' tool!*nSee docs for details!" "Quit"
  41.     skip end                ;Here we skip to the end, where all the files created so far are deleted
  42. endif
  43.  
  44. if "$nl2zwlha" EQ "RES LhA"
  45.     echo lha >env:nl2zwlha
  46. endif
  47.  
  48. which >env:nl2zwlzx lzx all            ;Finds the location of the LZX tool e.g. 'C:LZX'
  49. if WARN
  50.     RequestChoice >nil: "LhA2LZX Error Message" "Can't find 'LZX' tool!*nSee docs for details!" "Quit"
  51.     skip end
  52. endif
  53.  
  54. if "$nl2zwlzx" EQ "RES LZX"
  55.     echo lzx >env:nl2zwlzx
  56. endif
  57.  
  58. which >env:nl2zinf inf all            ;Finds the location of the 'inf' tool e.g. 'C:inf'
  59. if WARN
  60.     RequestChoice >nil: "LhA2LZX Error Message" "Can't find 'inf' tool!*nSee docs for details!" "Quit"
  61.     skip end
  62. endif
  63.  
  64. if NOT EXISTS L:lzx.keyfile            ;The registered version of LZX won't work without the keyfile
  65.     RequestChoice >nil: "LhA2LZX Error Message" "Can't find lzx.keyfile!*nSee docs for details!" "Quit"
  66.     skip end
  67. endif
  68.  
  69. if NOT EXISTS env:nl2zorig            ;If starting, default path of archive is RAM:
  70.     echo "*"RAM:*"" >env:nl2zorig        ;Asterisks are used before quote marks to tell AmigaDOS to use the quote character - here the text "RAM:" will be stored in env:nl2zorig instead of the text RAM:
  71. endif
  72.  
  73. if NOT EXISTS env:nl2zd                ;If starting, default path of temporary drawer l2z is RAM:
  74.     echo RAM: >env:nl2zd            ;Here the text 'RAM:' is redirected to the file 'env:nl2zd' - this means the text is now stored in 'env:nl2zd', which is also created by the redirection
  75. endif
  76.  
  77. if EXISTS env:LhA2LZXl2zpath            ;If the file ENV:LhA2LZXl2zpath exists (which stores the path of the temporary directory 'l2z'), the script will perform the actions to endif
  78.     cd $LhA2LZXl2zpath            ;Current Directory is now that which is stated in the contents of the environmental variable 'LhA2LZXl2zpath'
  79.     if EXISTS l2z                ;If the directory exists...
  80.         delete l2z/#? ALL FORCE >NIL:    ;...the contents of the temporary drawer used to store the archive files are deleted to start freshly. '>NIL:' means 're-direct the output of this operation to the NIL: device'. This will suppress any output.
  81.     else                    ;If the directory doesn't exist...
  82.         makedir l2z >nil:        ;...create it...
  83.     endif
  84.     skip beg1                ;...then we skip to the main body of the program
  85. endif
  86.  
  87. lab Temp                    ;If a location for 'l2z' hasn't already been chosen, we now choose where to put it
  88. RequestChoice >env:nl2zdrw "Default directory" "Where should I store temporary files? A*ntemporary drawer called 'l2z' will be*ncreated in your selected destination, and*nRAM: will be checked for space if chosen" "RAM:" "Other" "Cancel"
  89. if $nl2zdrw EQ 1                ;If the left button (i.e. RAM:) is chosen. The right-most button is assigned a value 0, and the other buttons are given ascending values from 1 on the left
  90.     echo "*"RAM:*"" >envarc:LhA2LZXl2zpath
  91.     copy envarc:LhA2LZXl2zpath TO env:LhA2LZXl2zpath >nil:    ;The directory is saved as default for subsequent runs
  92.     cd RAM:
  93.     makedir l2z >NIL:            ;Here we create the drawer
  94. endif
  95.  
  96. if $nl2zdrw EQ 2                ;If "Other" is chosen
  97.     lab Other
  98.     RequestFile >env:LhA2LZXl2zpath TITLE "Where should 'l2z' be made?" DRAWERSONLY NOICONS POSITIVE Create DRAWER RAM:
  99.     if WARN                    ;If the close gadget or the 'Cancel' button is chosen, RequestFile gives a Return Code of 5, which is detected by the WARN statement (this is set if the RC is 5 or greater)
  100.         skip Temp back            ;As the label 'Temp' occured previously in this file, we need to use the 'back' keyword to tell it to search backwards through this file instead of forwards
  101.     endif
  102.  
  103.     if $LhA2LZXl2zpath EQ "Ram Disk:"        ;If user clicks on RAM: in file requester...
  104.         echo "*"RAM:*"" >envarc:LhA2LZXl2zpath    ;...we change the text stored in 'env:LhA2LZXl2zpath' from 'Ram Disk:' to 'RAM:' to make things easier when checking for amount of memory needed later on
  105.     endif
  106.  
  107.     echo >env:nl2zd $LhA2LZXl2zpath        ;Get rid of quotation marks around the drawer name. This will read something like 'echo >env:nl2zd "DH1:TempStuff/"', and Echo will echo whatever is written inside the "quotation marks"
  108.     if NOT EXISTS $LhA2LZXl2zpath        ;This will check if the drawer exists, and if it doesn't it will tell the user
  109.         RequestChoice "LhA2LZX Error Message" "PATH does not exist!" "Choose again!"
  110.         skip Other BACK
  111.     else
  112.         cd $LhA2LZXl2zpath
  113.         makedir l2z >NIL:
  114.     endif
  115. endif
  116.  
  117. if $nl2zdrw EQ 0                ;If "Cancel" is chosen
  118.     skip end
  119. endif
  120.  
  121.  
  122.  
  123.  
  124. ;...And now on to the main workings...
  125.  
  126.  
  127.  
  128.  
  129. lab beg1
  130. echo "{pat}" >env:nl2zl                ;This saves the filename input "pat" to an env variable
  131. list >env:nl2zpatsize env:nl2zl LFORMAT=%L    ;This gets the size of the filename
  132. if $nl2zpatsize EQ 1                ;If no filename has been given...
  133.     skip exe                ;...jump to the procedure that lets you choose one...
  134. else                        ;...otherwise...
  135.     skip File                ;...start processing the file
  136. endif
  137.  
  138. lab exe
  139. RequestFile >env:nl2zldfls TITLE "Choose file(s) to convert" POSITIVE Convert ACCEPTPATTERN #?.(lha|lzx|lzh) MULTISELECT DRAWER $nl2zorig
  140. if WARN                    ;If no files are chosen...
  141.     skip end            ;...quit LhA2LZX
  142. endif
  143. list >RAM:LhA2LZX.exe `type env:nl2zldfls` LFORMAT="execute *"$LhA2LZXpath*" *"%F%N*""    ;The archives chosen from the requester will be output in a special format - something like 'execute "dh1:Scripts/LhA2LZX" "dh1:TempStuff/new.lzx"'
  144.  
  145. execute RAM:LhA2LZX.exe            ;Execute the file which lists all the archives to process - it is best just to read 'RAM:LhA2LZX.exe' whilst you are running 'LhA2LZX' to see what it contains!
  146. delete RAM:LhA2LZX.exe FORCE >NIL:    ;After all the files have been processed, delete the listing file
  147. echo "*e[1;1H*eJ"            ;This clears the output window
  148. echo "*n*n*n                       *e[1;32m  Thank you for using"
  149. echo "                              *e[33m LhA *e[0m*e[3;1m2 *e[0m*e[2mLZX"    ;All the *e[... parts do is change the colour/style of the text - known as ANSI - see "v2.2" in "Program History" in the .guide
  150. echo "*n*n*n"                ;All these echoes are merely to thank you for using this wonderful script!
  151. quit            ;The end of LhA2LZX  :^(
  152.  
  153.  
  154. lab File
  155.  
  156. echo "*"{pat}*"" >env:nl2zldfl
  157. list >env:nl2zorig $nl2zldfl LFORMAT="*"%F*""    ;Get the path of the directory that the file is in, surrounded by quotation marks
  158. if $nl2zorig EQ "Ram Disk:"
  159.     echo "*"RAM:*"" >env:nl2zorig        ;For some reason, if RAM: is chosen, "RAM:" is stored in env:nl2zldfl but "Ram Disk:" is stored in env:nl2zorig...
  160. endif
  161. echo >env:nl2zo $nl2zorig            ;Get rid of the quotes around the directory name
  162.  
  163. if NOT EXISTS $nl2zorig                ;On the off-chance that someone has entered a path via the CLI which doesn't actually exist...
  164.     RequestChoice >nil: "LhA2LZX Error Message" "PATH does not exist!" "Try again"
  165.     skip end                ;...skip to the end
  166. endif
  167.  
  168. if NOT EXISTS $nl2zldfl
  169.     RequestChoice >nil: "LhA2LZX Error Message" "FILE does not exist!" "Try again"
  170.     skip end
  171. endif
  172.  
  173. lab Tilde
  174. search env:nl2zldfl ~ >nil:            ;Here we search the archive name to see if it contains a tilde (~), which LZX cannot process
  175. if $RC EQ 0                    ;If the Return Code is 0 (i.e. if the search was successful and a tilde was found)...
  176.     RX lha2lzx.rexx    tilde >NIL:        ;If a tilde is found, call the AREXX program 'lha2lzx.rexx' to rename the file without a tilde
  177. endif
  178.  
  179. list >env:nl2zsuf $nl2zldfl LFORMAT=%E        ;Gives suffix of the archive only
  180.  
  181. if $nl2zsuf NOT EQ lha                ;If file doesn't have .lha suffix
  182.     if $nl2zsuf NOT EQ lzx            ;If file doesn't have .lzx suffix
  183.         if $nl2zsuf NOT EQ lzh        ;If file doesn't have .lzh suffix (which is de-archived by LhA and LZX)
  184.             RequestChoice "LhA2LZX Error Message" "File $nl2zl is NOT an LhA or LZX archive!" "Ooops!"
  185.             skip end
  186.         endif
  187.     endif
  188. endif
  189.  
  190. if $nl2zsuf EQ lzh
  191.     rename $nl2zldfl AS "$nl2zo$nl2zbnm.lha"    ;Rename the .lzh archive with an .lha suffix, as it is virtually the same anyway and will make things easier later on
  192.     echo "*"$nl2zo$nl2zbnm.lha*"" >env:nl2zldfl    ;Get the new file name
  193.     echo $nl2zldfl >env:nl2zl
  194. endif
  195.  
  196. list >env:nl2zbnm1 $nl2zldfl LFORMAT=%S        ;Strips the path of the archive to give only the filename with suffix
  197. list >env:nl2zbnm $nl2zldfl LFORMAT=%M        ;Removes .lzx, .lha or .lzh suffix from filename
  198. list >env:nl2zcom $nl2zldfl LFORMAT=%C        ;Gets file comment
  199. list >env:nl2zdat $nl2zldfl LFORMAT=%D DATES    ;Gets file creation date
  200. list >env:nl2ztim $nl2zldfl LFORMAT=%T        ;Gets file creation time
  201. list >env:nl2zprot $nl2zldfl LFORMAT=%A        ;Gets the file protection bits
  202. rx lha2lzx.rexx prot >NIL:            ;Call the AREXX script 'lha2lzx.rexx' and tell it to execute the 'protection' procedure
  203. list >env:nl2zcomsz env:nl2zcom LFORMAT=%L    ;Gets size of comment
  204.  
  205. lab Memchk                    ;This labels the following section as "Memchk" so the script can skip to this point from anywhere in the script if it encounters the line "skip Memchk"
  206. set nl2zmemsz `avail flush total`        ;Saves the result from "avail flush total" (try it in a Shell - it gets the total size of available memory) as ENV:nl2zmemsz
  207. cd $nl2zorig                    ;CD's to the directory of the original archive
  208. list >env:nl2zflsz $nl2zldfl LFORMAT=%L        ;Gets size of original archive
  209. eval >env:nl2zflmem $nl2zflsz * 4        ;Multiplies the archive size by 4
  210. eval >env:nl2zflk $nl2zflmem / 1024        ;Gives the size of the required memory in Kilobytes, as it will be easier to read and relate to than bytes
  211. if NOT $nl2zmemsz VAL GT $nl2zflmem        ;If your available memory size is less than 4 times the size of the original archive (LZX often decompresses to 3-4 times the size of the archive)...
  212.     if $LhA2LZXl2zpath EQ "RAM:"            ;...and RAM: has been chosen to store temporary files...
  213.         RequestChoice >env:nl2znomem "! Insufficient Memory!" "There may be insufficient memory to store temporary files in RAM:*n(may need at least $nl2zflk k)" "Choose other path" "Continue anyway" "Cancel"
  214.         if $nl2znomem EQ 0        ;"Cancel"
  215.             skip end
  216.         endif
  217.         if $nl2znomem EQ 1        ;"Other"
  218.             skip Other back
  219.         endif
  220.     endif
  221. endif
  222.  
  223. if $nl2zsuf EQ lha
  224.     echo LZX >env:nl2znsuf            ;Gives the type of file to convert to in a requester later
  225.     echo LhA >env:nl2zsuf
  226. endif
  227.  
  228. if $nl2zsuf EQ lzx
  229.     echo LhA >env:nl2znsuf
  230.     echo LZX >env:nl2zsuf            ;Makes it look better in the requester
  231. endif
  232.  
  233.  
  234. lab Extra
  235. echo "*e[0 p"                ;This clears the display (the output CLI)
  236. RequestChoice >env:nl2zext "Convert $nl2zl to . . ." "Do you want to convert $nl2zl to the other*nfiletype or to the smallest archive?*n*nConvert from $nl2zsuf to:" "$nl2znsuf" "Smallest" "Repack" "Cancel"
  237. if $nl2zext EQ 0            ;If 'Cancel' is selected
  238.     skip end            ;This skips back to the section labelled 'end', at the end
  239. endif
  240.  
  241. if $nl2zext EQ 3            ;If 'Repack' is selected...
  242.     echo $nl2znsuf >env:nl2zsuf1    ;...temporarily swap the suffix...
  243.     echo $nl2zsuf >env:nl2znsuf    ;...with the other file type suffix...
  244.     echo $nl2zsuf1 >env:nl2zsuf    ;...so that the correct program is used to repack the archive. We cleverly make LhA2LZX think that an LhA archive is an LZX archive to re-archive it using LhA, and vice versa
  245. endif
  246.  
  247. lab Conv                ;This part until 'lab end' converts the archive to either LhA or LZX, and saves whichever type the user requested
  248. cd $LhA2LZXl2zpath
  249. cd l2z
  250. "$nl2zwlzx" x -a -F -x -X0 $nl2zldfl    ;As the LZX keyfile is now available, the ability to de-archive LhA files is possible, and also much quicker
  251. if NOT $RC EQ 0                ;If user aborts it will skip to 'end'
  252.     skip er                ;RC stands for Return Code - the number returned by LhA if the operation fails
  253. endif
  254.     
  255. if $nl2zsuf EQ lzx                        ;Means it is an LZX archive
  256.     "$nl2zwlha" -2 -a -r -F -y -M -e -x a $nl2zbnm #?    ;If not aborted, file is archived
  257.     if NOT $RC EQ 0                        ;If user aborts it will skip to 'end'
  258.         skip er
  259.     endif
  260. else                            ;Means it is an LhA/LZH archive
  261.     "$nl2zwlzx" -r -e -3 -X -F a -Qf $nl2zbnm #?    ;If not aborted, file is archived
  262.     if NOT $RC EQ 0                    ;If user aborts it will skip to 'end'
  263.         skip er
  264.     endif
  265. endif
  266.  
  267. if $nl2zext EQ 3            ;If 'Repack' was selected
  268.     echo $nl2znsuf >env:nl2zsuf    ;Replace the original suffix
  269.     echo 2 >env:nl2zext        ;Now that the conversion has been done, we treat the rest of the process as if we want the smallest archive
  270. endif
  271.  
  272. lab Size
  273. list >env:nl2zold $nl2zldfl LFORMAT=%L            ;Gets the size of the original archive
  274. list >env:nl2znew $nl2zbnm.$nl2znsuf LFORMAT=%L        ;Gets the size of the new archive
  275. eval >env:nl2zdiff $nl2zold - $nl2znew            ;Subtracts the size of the new from the original
  276. eval >env:nl2zdiff1 $nl2znew - $nl2zold            ;Subtracts the size of the original from the new
  277. $nl2zinf $nl2zldfl QUIET >env:nl2zvolsz            ;Gets the amount of free space of destination disk
  278. rx lha2lzx.rexx size >NIL:                ;Call the AREXX script 'lha2lzx.rexx' and tell it to execute the 'size' procedure
  279. echo "now replaces" >env:nl2znowrep            
  280. eval >env:nl2zendsz $nl2zvolsz + $nl2zold - $nl2znew    ;Calculates how much free space will be left on the disk when the old archive is replaced
  281.  
  282. if $nl2znew GE $nl2zold VAL                ;Original archive is smaller than the new one, so the original is kept
  283.     if $nl2zext EQ 2                ;If the user wanted to convert to the other filetype
  284.         RequestChoice > NIL: " $nl2zl used" "Using the original archive because it's $nl2zdiff1 bytes*nsmaller!" "Okay"        ;The difference in file sizes is cleverly given
  285.         skip end
  286.     endif
  287. endif
  288.  
  289. lab Size1
  290. if 0 GE $nl2zendsz VAL            ;If there won't be enough room for the new archive on the destination disk...
  291.     RequestChoice >env:nl2zaltpathreq "! Error !" "New archive is too large to fit on disk!*n*nDo you want to choose another path*nto save the new archive to?" "Yes" "No"
  292.     if $nl2zaltpathreq EQ 0
  293.         skip end
  294.     else
  295.         lab AltPath
  296.         RequestFile >env:nl2zaltpath TITLE "Choose alternate path..." POSITIVE Save DRAWERSONLY DRAWER RAM: ;...choose a new save path
  297.         if NOT EXISTS $nl2zaltpath
  298.             RequestChoice >NIL: "! Error !" "Path does not exist!" "Doh!"
  299.             skip AltPath BACK
  300.         else
  301.             $nl2zinf $nl2zaltpath QUIET >env:nl2zvolsz        ;Get the amount of free space of the new path
  302.             rx lha2lzx.rexx size >NIL:                ;Call the AREXX script 'lha2lzx.rexx' and tell it to execute the 'size' procedure
  303.             eval >env:nl2zendsz $nl2zvolsz + $nl2zold - $nl2znew    ;Calculates how much free space will be left on the disk when the old archive is replaced
  304.             if 0 GE $nl2zendsz VAL
  305.                 skip Size1 BACK
  306.             else
  307.                 copy env:nl2zaltpath TO env:nl2zorig QUIET    ;Put the new save path in place of the old
  308.                 echo "has been converted from" >env:nl2znowrep    ;This changes some text in a requester later on, to make the requester text make more sense
  309.                 echo >env:nl2zo $nl2zorig            ;Get rid of the quotes around the directory name
  310.                 echo "Hello World!" >env:nl2zcheck        ;This is a "dummy" file, created so that we know the destination has changed
  311.             endif
  312.         endif
  313.     endif
  314. endif
  315.  
  316. if NOT EXISTS env:nl2zcheck                    ;If the dummy file does not exist...
  317.     delete $nl2zldfl QUIET                    ;...delete the original archive...otherwise leave it on the disk
  318. endif
  319. copy "$nl2zbnm.$nl2znsuf" TO $nl2zorig QUIET            ;Copy the new archive over in place of the original
  320. protect "$nl2zo$nl2zbnm.$nl2znsuf" $nl2zprot >NIL:
  321. if NOT env:nl2zcomsz EQ 1                    ;If the original archive had a comment...
  322.     rx lha2lzx.rexx comment >NIL:                ;Call the AREXX script 'lha2lzx.rexx' and tell it to execute the 'filecomment' procedure
  323.     filenote FILE "$nl2zo$nl2zbnm.$nl2znsuf" "$nl2zcom"    ;...copy it to the new archive
  324. endif
  325. setdate "$nl2zo$nl2zbnm.$nl2znsuf" $nl2zdat $nl2ztim        ;Sets the date of the new archive to the old
  326. if $nl2zext EQ 1                        ;If the user wanted to convert to the other filetype
  327.     if $nl2znew GT $nl2zold VAL
  328.         RequestChoice > NIL: "! Operation Successful !" "$nl2zo$nl2zbnm.$nl2znsuf*n  $nl2znowrep*n$nl2zl*n  and is $nl2zdiff1 bytes larger" "Okay"
  329.     else
  330.         RequestChoice > NIL: "! Operation Successful !" "$nl2zo$nl2zbnm.$nl2znsuf*n  $nl2znowrep*n$nl2zl*n  and is $nl2zdiff bytes smaller!" "Nice one!"
  331.     endif
  332. else
  333.     RequestChoice > NIL: "! $nl2zo$nl2zbnm.$nl2znsuf used !" "Using the new archive because it's $nl2zdiff bytes smaller!" "Nice one!"
  334. endif
  335.  
  336. skip end
  337.  
  338. lab er                        ;This will only be reached if an error has occured during the de-/archiving process
  339. RequestChoice >NIL: "LhA2LZX Error Message" "An error/user-abort has occured!*n*nSee docs for details" "Okay"
  340.  
  341. lab end
  342. if EXISTS env:LhA2LZXl2zpath
  343.     cd $LhA2LZXl2zpath
  344.     if EXISTS l2z
  345.         delete l2z ALL QUIET FORCE    ;Delete all the temporary files
  346.     endif
  347. endif
  348.  
  349. if EXISTS RAM:l2z                ;This is in case the drawer where 'l2z' was located had to be changed from RAM: due to insufficient memory
  350.     delete RAM:l2z ALL QUIET FORCE
  351. endif
  352.  
  353. list >nil: ENV:nl2z#? TO T:l2ztmp LFORMAT "delete %S%S >NIL:"    ;This generates a list of all the environment variables used and deletes them
  354. execute T:l2ztmp >nil:                        ;The variables are actually deleted by this line
  355. delete T:l2ztmp >nil:                        ;The new script generated is deleted here.  Now everything LhA2LZX created during its running has been disposed of.
  356.